Cryosphere · Snow Mapping Enhancement Index

BSI_SNOW – Snow Bare Surface Index

BSI_SNOW is a modified form of the BSI index adapted for snow detection and clean–dirty snow separation, using Red, Blue, NIR and SWIR reflectance to distinguish snow from bare rock and mixed pixels.

1. Scientific Definition

The BSI_SNOW index enhances snow and ice using a soil-index structure but with thresholds and interpretation adapted to cryosphere studies.

Formula

BSI_SNOW = (SWIR + Red − (NIR + Blue)) / (SWIR + Red + NIR + Blue)

  • SWIR – sensitive to snow grain size & impurities
  • Red – strong snow reflectance
  • NIR – helps distinguish snow from soil
  • Blue – useful for clean vs dirty snow

Interpretation

  • High positive values → clean snow / ice
  • Moderate values → dirty snow / mixed snow–rock
  • Negative → soil / rocks / water / vegetation

Applications

  • Snow cover mapping
  • Dirty snow detection
  • Snow–rock separation in mountains
  • Cryosphere and melt analysis

2. Required Bands

Sentinel-2

  • Blue → B2
  • Red → B4
  • NIR → B8
  • SWIR → B11

Landsat 8/9

  • Blue → B2
  • Red → B4
  • NIR → B5
  • SWIR1 → B6

Suggested Palette

[ "#0b1220", "#28405c", "#4f7da3", "#9ac7e6", "#ffffff" ]

3. Google Earth Engine Code – BSI_SNOW


// BSI_SNOW = (SWIR + Red - (NIR + Blue)) / (SWIR + Red + NIR + Blue)

var roi = geometry;
Map.centerObject(roi, 9);

// Sentinel-2 SR
var s2 = ee.ImageCollection("COPERNICUS/S2_SR")
  .filterBounds(roi)
  .filterDate("2023-01-01", "2023-12-31")
  .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 40))
  .select(["B2","B4","B8","B11"]); // Blue, Red, NIR, SWIR

var img = s2.median().clip(roi);

// BSI_SNOW
var bsi_snow = img.expression(
  "(SW + R - (N + B)) / (SW + R + N + B)",
  {
    "SW": img.select("B11"), // SWIR
    "R":  img.select("B4"),  // Red
    "N":  img.select("B8"),  // NIR
    "B":  img.select("B2")   // Blue
  }
).rename("BSI_SNOW");

var vis = {
  min: -1,
  max: 1,
  palette: ["#0b1220","#28405c","#4f7da3","#9ac7e6","#ffffff"]
};

Map.addLayer(bsi_snow, vis, "BSI_SNOW");

// Optional snow mask
var snowMask = bsi_snow.gt(0.2).selfMask();
Map.addLayer(snowMask, {palette:["#ffffff"]}, "Snow Mask (BSI_SNOW > 0.2)", false);

// Export
Export.image.toDrive({
  image: bsi_snow,
  description: "BSI_SNOW_export",
  fileNamePrefix: "BSI_SNOW",
  region: roi,
  scale: 20,
  crs: "EPSG:4326",
  maxPixels: 1e13
});